package com.teamwork_backend.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teamwork_backend.entity.Companys;
import com.teamwork_backend.entity.ResumePosition;
import com.teamwork_backend.entity.UserInfo;
import com.teamwork_backend.entity.Users;
import com.teamwork_backend.service.UsersService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author windy
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/users")
@Api(value = "UsersController", tags = {"个人/专家用户登录注册接口"})
public class UsersController {
    @Autowired
    private UsersService usersService;

    /** 注册个人/专家用户账户
     */
    @PostMapping("reg") // Post方法 /users/reg
    @ApiOperation(value = "注册个人/专家用户账户", notes = "注册个人/专家用户账户", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult reg(
            @ApiParam(name = "users", value = "个人/专家账户对象", required = true)
            @RequestBody Users users)
    {
        // 设置添加成功的返回标志
        boolean flag = usersService.save(users); //INSERT

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户注册成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户注册失败！");
        }
    }

    /** 删除用户 */
    @GetMapping("del") // Get方法
    @ApiOperation(value = "删除用户", notes = "删除用户", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userid", value = "用户唯一标示", required = true, dataType = "string")})
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult del(String userid) {
        // 设置删除成功的返回标志
        boolean flag = usersService.removeById(userid); // 删除

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户删除成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户删除失败！");
        }
    }

    /** 修改用户 */
    @PostMapping("update") // Post方法
    @ApiOperation(value = "修改用户", notes = "修改用户", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult update(
            @ApiParam(name = "users", value = "修改用户实体", required = true)
            @RequestBody Users users) {


        // 设置添加成功的返回标志
        boolean flag = usersService.updateById(users); // 修改

        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("用户修改成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("用户修改失败！");
        }
    }
    /** 登录用户 */
    @PostMapping("login") // Post方法
    @ApiOperation(value = "登录用户", notes = "登录用户", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult login(HttpSession session,
                            @ApiParam(name = "users", value = "修改用户实体", required = true)
                            @RequestBody Users users) {

        String account = users.getAccount();
        String password = users.getPassword();
        int type = users.getType();
        QueryWrapper<Users> wrapper = new QueryWrapper<>();
        wrapper.select().eq("account",account).eq("password",password).eq("type",type);
        Users loginuser = usersService.getOne(wrapper);
        if(loginuser==null) {
            return DataResult.failed().message("请检查账户或密码是否正确！");
        } else {
            // 因为登录成功后密码不能在网络中传输，所以要设置为null，返回的数据会自动过滤掉此字段
            loginuser.setPassword(null);
            session.setAttribute("sname",loginuser);
            return DataResult.finished().data("data", loginuser).message("用户登录成功！");
        }
    }

    @GetMapping("getsession")
    public Object getsession(HttpSession session){
        return session.getAttribute("sname");
    }

}